package cn.wolfcode.zookeeper.server;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;

//服务器启动注册
public class OrderServerRegister {
    //zkServer的连接地址信息,多个连接地址之间使用逗号隔开
    private String connectStr="lab171:2181,lab172:2181,lab173:2181";
    //客户端连接zkServer的超时时间
    private int sessionTimeOut=2000;
    //zk客户端 实例对象,用户连接zk集群
    private ZooKeeper client=null;
    //指定服务器地址信息存放的目录
    private String serverAddr="/servers";
    //指定节点名称,因为使用的是EPHEMERAL_SEQUENTIAL,所以不会存在节点重复的情况
    //并且在断开连接后,该节点会自动删除
    private String serverName="orderServer";

    public OrderServerRegister() throws Exception {
        //实例化zk客户端
        client=new ZooKeeper(connectStr,sessionTimeOut,null);
        //判断存放的地址是否存在,如果不存在,创建一个对应的目录
        Stat stat = client.exists(serverAddr,null);
        if(stat ==null){
            client.create(serverAddr,"".getBytes(),
                    ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
        }
    }
    // 注册地址信息的方法
    public void register(String host,String port) throws Exception{
        //创建一个临时的序列节点
        client.create(serverAddr+"/"+serverName,(host+":"+port).getBytes(),
                ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);
    }

    public static void main(String[] args) throws Exception {
        //设置ip地址和端口 通过启动参数传递进来
        String host=args[0];
        String port=args[1];
        OrderServerRegister server = new OrderServerRegister();
        server.register(host,port);
        System.out.println("服务端"+host+":"+port+"启动成功");
        //模拟服务程序一直处于运行状态
        Thread.sleep(Long.MAX_VALUE);
    }
}
